//距离转专业考试还有60天
//#include <stdio.h>
//#include <stdlib.h>
//struct Stu{
//	int num;
//	char name[20];
//	double score;
//	struct Stu* next;
//};
//typedef struct Stu LinkNode;
//typedef struct Stu* LinkList;
//LinkList CreatList()
//{
//	LinkList head=NULL,p=NULL,q=NULL;
//	int ID;
//	double mark;
//	while(1)
//	{
//		scanf("%d",&ID);
//		if(ID>0)
//		{
//			scanf("%lf",&mark);
//			q=(LinkList)malloc(sizeof(LinkNode));
//			q->num=ID;
//			q->score=mark;
//			scanf("%s",q->name);
//			q->next=NULL;
//		}
//		else
//			return head;
//		if(head==NULL)
//		{
//			head=p=q;
//		}
//		else
//			p->next=q;
//		p=q;
//	}
//}
//void DelList(LinkList head,LinkList q)
//{
//	LinkList p=head;
//	while(p->next!=q)
//	{
//		p=p->next;
//	}
//	p->next=q->next;
//	free(q);
//}
//
//void RunList(LinkList head)
//{
//	LinkList p,q,r;
//	p=head->next;
//	q=r=head;
//	while(p)
//	{
//		q=head;
//		while(q->next!=p)
//		{
//			if(q->num==p->num)
//				break;
//			else
//				q=q->next;
//		}
//		if(q->next!=p)
//		{
//			DelList(head,p);
//			p=r;
//		}
//		else
//		{
//			r=p;
//			p=p->next;
//		}
//	}
//}
//
//void PrintList(LinkList head)
//{
//	LinkList p=head;
//	while(p)
//	{
//		printf("%d\t%s\t%lf\n",p->num,p->name,p->score);
//		p=p->next;
//	}
//}
//
//void FreeList(LinkList head)
//{
//	LinkList p,q=head;
//	while(p)
//	{
//		p=q->next;
//		free(q);
//		q=p;
//	}
//}
//
//int main()
//{
//	LinkList p1;
//	p1=CreatList();
//	RunList(p1);
//	PrintList(p1);
//	FreeList(p1);
//	return 0;
//}

#include <stdio.h>
#include <stdlib.h>
struct Stu{
	int data;
	struct Stu* next;
};
typedef struct Stu LinkNode;
typedef struct Stu* LinkList;
LinkList CreatList()
{
	int tmp;
	LinkList head=NULL,p=NULL,q=NULL;
	while(1)
	{
		scanf("%d",&tmp);
		if(tmp>0)
		{
			q=(LinkList)malloc(sizeof(LinkNode));
			q->data=tmp;
			q->next=NULL;
		}
		else
			return head;
		if(!head)
			head=p=q;
		else
			p->next=q;
		p=q;
	}
}

LinkList ReverseList(LinkList p)
{
	LinkList bNode,Node,fNode;
	bNode=NULL;
	Node=p;
	while(fNode)
	{
		if(bNode==NULL)
		{
			bNode=Node;
			fNode=Node->next;
		}
		Node=fNode;
		fNode=fNode->next;
		Node->next=bNode;
		bNode=Node;
	}
	p->next=NULL;
	return Node;
}

void PrintList(LinkList head)
{
	LinkList p=head;
	while(p)
	{
		printf("%d\n",p->data);
		p=p->next;
	}
}

void FreeList(LinkList head)
{
	LinkList p=head,q=head;
	while(p)
	{
		p=q->next;
		free(q);
		q=p;
	}
}

int main()
{
	LinkList p1,p2;
	p1=CreatList();
	p2=ReverseList(p1);
	PrintList(p2);
	FreeList(p1);
	FreeList(p2);
	return 0;
}
